'''
Description: 
Author: Zilu
Date: 2021-11-08 15:53:03
Version: 
LastEditTime: 2021-11-08 16:39:33
LastEditors: Zilu
'''

# 编写单元测试
import unittest

from mydict import MyDict

# 以test开头的方法被认为是测试方法，否则就不被认为是测试方法，测试的时候不执行
class TestDict(unittest.TestCase):
    def setUp(self):
        print('setup...')

    def tearDown(self):
        print('teardown...')
    
    def test_init(self):
        d = MyDict(a = 1,b = 'test')
        self.assertEqual(d.a, 1)
        self.assertEqual(d.b, 'test')
        self.assertTrue(isinstance(d, dict))

    def test_key(self):
        d = MyDict()
        d['key'] = 'value'
        self.assertEqual(d.key, 'value')

    def test_attr(self):
        d = MyDict()
        d.key = 'value'
        self.assertTrue('key' in d)
        self.assertEqual(d['key'], 'value')
    
    def test_keyerror(self):
        d = MyDict()
        with self.assertRaises(KeyError):
            value = d['empty']

    def test_attrerror(self):
        d = MyDict()
        with self.assertRaises(AttributeError):
            value = d.empty

# 可以用以下两句运行单元测试
if __name__ == '__main__':
    unittest.main()
# 或者可以在终端通过参数-m unittest直接运行单元测试，可以添加-v，输出更多测试信息

# 可以在单元测试中编写两个特殊的setUp()和tearDown()方法。
# 这两个方法会分别在每调用一个测试方法的前后分别被执行。


